<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    /* 
      dp[i]含义：第n个数拆分后成乘积最大的值
      递推数组：dp[i] = Math.max(dp[i], i * (i - j), i * dp[i - j])
      初始化：dp[2]是1，dp[0]和dp[1]没有实际的含义
      递推顺序：从前往后
      推导：
        dp[10] = [undefined, undefined, 1, 2, 4, 6, 9, 12; 18, 27, 36] ===> i * dp[i - j]是36比 j * (i - j)要大
        dp[6] = [undefined, undefined, 1, 2, 4, 6, 9]  1 * 8; 2 * 4; 3 * 3; 4 * 2 ==>3 * 3的9比i * dp[i - j]要大
    */
    function initBreak_Dynamic(n) {
      // 初始化，注意长度是n+1，需要第10个数
      let dp = new Array(n + 1).fill(0)
      dp[2] = 1
      if (n === 2) return 1
      // i必须能取到n，n为10时要去求当n为10时的最大乘机是多少
      for (let i = 3; i <= n; i++) {
        // j必须比i - 1小，不然就是10，没有拆分了
        for (let j = 1; j <= i - 1; j++) {
          // 递推
          dp[i] = Math.max(dp[i], j * (i - j), j * dp[i - j])
        }
      }
      return dp[n]
    }

    let res2 = initBreak_Dynamic(6)
    console.log(res2)
    // let res1 = initBreak_Dynamic(10)
    // console.log(res1)
  </script>
</body>

</html>